package main

import (
	"fmt"
	"test-go/tool"

	paillier "github.com/roasbeef/go-go-gadget-paillier"
	"github.com/tuneinsight/lattigo/v4/bfv"
	"github.com/tuneinsight/lattigo/v4/rlwe"
)

// DecryptData 解密数据，支持 FHE 和 PHE 类型
func DecryptData(data tool.EncryptedData, skFHE *rlwe.SecretKey, skPHE *paillier.PrivateKey) string {
	// 根据数据类型选择解密方式
	if data.Type == "FHE" {
		// 使用 rlwe.NewCiphertext 构造 FHE 密文
		ct := &rlwe.Ciphertext{}
		err := ct.UnmarshalBinary([]byte(data.Cipher)) // 使用 UnmarshalBinary 解析密文
		if err != nil {
			return fmt.Sprintf("Failed to parse FHE ciphertext: %v", err)
		}
		paramsLiteral := bfv.PN12QP109
		params, err := bfv.NewParametersFromLiteral(paramsLiteral)
		// params, err := bfv.NewParametersFromLiteral(bfv.DefaultParams[bfv.PN13QP218])
		if err != nil {
			return fmt.Sprintf("Failed to initialize FHE parameters: %v", err)
		}
		// 解密 FHE 数据
		decryptedFHE := tool.DecryptFHE(ct, params, skFHE)
		return fmt.Sprintf("Decrypted (FHE): %d", decryptedFHE)
	} else if data.Type == "PHE" {
		// 解密 PHE 数据
		decryptedPHE, err := tool.DecryptPHE([]byte(data.Cipher), skPHE)
		if err != nil {
			return fmt.Sprintf("PHE decryption failed: %v", err)
		}
		return fmt.Sprintf("Decrypted (PHE): %d", decryptedPHE)
	}
	return "Unknown Encryption Type"
}

func main() {
	fmt.Println("Hello World")
}
